#案例：演示位运算符的使用！

#位运算符有哪些：左移(<<)、右移(>>)、按位取反(~)、按位异或(^)、按位与(&)、按位或(|)！

#说明：这些位运算符的操作对象是这些数的二进制位！

#演示：左移(<<)：格式：a<<b
#功能：把a的二进制位左移b个二进制位！
#运算规则：把a的二进制的左边b个二进制删除，右边补b个0！
a=100
b=3
c=a<<b
print(c) #800
'''
00000000 00000000 00000000 01100100 //100
<<3
-----------------------------------------
00000000 00000000 00000011 00100000 //800
'''


#演示：右移(>>): 格式：a>>b
#功能：把a的二进制位右移b位！
#运算规则：把a的二进制右边删除b个二进制位，左边补b个符合位！
#情况1：a是负数
a=-56
c=a>>2
print(c) #-14
'''
11111111 11111111 11111111 11001000 //-56
>>2
-----------------------------------------
11111111111111111111111111110010 //-14
'''


#情况2：a是正数
ret=78>>3
print(ret) #9
'''
00000000 00000000 00000000 01001110//78
>>3
-----------------------------------
00000000000000000000000000001001 //9
'''


# 演示：按位取反(~):格式： ~a
#功能：把a的每个二进制位进行取反。1->0.,0->1
ret=~45
print(ret) #-46
'''
00000000 00000000 00000000 00101101//45
~
---------------------------------------
11111111 11111111 11111111 11010010 //-46
'''


# 演示：按位异或(^):格式：a^b
#功能：分别对a的每个二进制位和b的每个二进制位进行比较；如果该二进制相同，那么该二进制位的结果是0；如果不相同，结果1！
ret=45^-56
print(ret) #-27
'''
00000000 00000000 00000000 00101101 //45
^
11111111 11111111 11111111 11001000 //-56
-------------------------------------------
11111111 11111111 11111111 11100101 //-27
'''


# 演示：按位与(&):格式：a & b
#功能：分别对a的二进制位和b的二进制进行比较，真真才是真！
ret=45&-56
print(ret) #8
'''
00000000 00000000 00000000 00101101 //45
&
11111111 11111111 11111111 11001000 //-56
----------------------------------------------
00000000 00000000 00000000 00001000 //8

'''

# 演示：按位或(|):格式：a | b
#功能：分别对a的每个二进制和b的二进制进行比较。假假才是假！
ret=45 | -56
print(ret) #-19
'''
00000000 00000000 00000000 00101101 //45
|
11111111 11111111 11111111 11001000 //-56
---------------------------------------------
1111111 111111111 11111111 11101101 //-19
'''




